subroutine check_transition_rate(cunit,tid,temp)
  use param
  use label_data_param,only:obj_type
  use label_data_param,only:n_obj_type
  use react_data_param,only:react_type
  use react_data_param,only:n_react_type
  use geom_data_param,only:geom_obj
  use geom_data_param,only:n_geom_obj
  use sink_data_param,only:sink_type
  use sink_data_param,only:n_sink_type
  implicit none

  integer,intent(in) :: cunit,tid
  real(dbl),intent(in) :: temp

  integer :: i,j,k,n,in1,in2,in3,pos1,pos2
  character(len=len_linebuf) :: str

  call log_msg1(cunit,"")
  write(str,'("List of transition rates  (",1x, &
       "run=",i2,1x,", temp=",f6.2,1x,"K )")') tid,temp
  call log_msg1(cunit,str)

  in1=1
  in2=2
  in3=3

  ! Diffusion of object
  call log_msg1(cunit,"")
  call log_msg1_indent(cunit,in1,"> Diffusion of objects")
  do i=1,n_obj_type
     pos1=0

     pos2=pos1+6
     write(str(pos1+1:pos2),'("[",i4.4,"]")') i
     pos1=pos2

     pos2=pos1+11
     write(str(pos1+1:pos2),'(1x,a10)') obj_type(i)%name
     pos1=pos2

     if (obj_type(i)%does_move) then
        pos2=pos1+14
        write(str(pos1+1:pos2),'(1x,1pe13.5)') &
             obj_type(i)%diff_const_rate
        pos1=pos2
     else
        pos2=pos1+9
        write(str(pos1+1:pos2),'(1x,"immobile")')
        pos1=pos2
     end if

     call log_msg1_indent(cunit,in2,str(1:pos2))
  end do

  ! Dissociation of object
  call log_msg1(cunit,"")
  call log_msg1_indent(cunit,in1,"> Dissociation of objects")
  do i=1,n_obj_type
     pos1=0

     pos2=pos1+6
     write(str(pos1+1:pos2),'("[",i4.4,"]")') i
     pos1=pos2

     pos2=pos1+11
     write(str(pos1+1:pos2),'(1x,a10)') obj_type(i)%name
     pos1=pos2

     if (obj_type(i)%does_diss) then
        pos2=pos1+4
        write(str(pos1+1:pos2),'(1x,"(",i1,")")') &
             obj_type(i)%diss_type
        pos1=pos2

        pos2=pos1+14
        write(str(pos1+1:pos2),'(1x,1pe13.5)') &
             obj_type(i)%diss_const_rate(1)
        pos1=pos2

        call log_msg1_indent(cunit,in2,str(1:pos2))

        do j=2,obj_type(i)%diss_type
           pos1=0

           pos2=pos1+14
           write(str(pos1+1:pos2),'(1x,1pe13.5)') &
                obj_type(i)%diss_const_rate(j)
           pos1=pos2

           call log_msg1_indent(cunit,26,str(1:pos2))
        end do
     else
        pos2=pos1+12
        write(str(pos1+1:pos2),'(1x,"indivisible")')
        pos1=pos2

        call log_msg1_indent(cunit,in2,str(1:pos2))
     end if
  end do

  ! Reaction between objects
  call log_msg1(cunit,"")
  call log_msg1_indent(cunit,in1,"> Reactions between objects")
  do i=1,n_react_type
     pos1=0

     pos2=pos1+8
     write(str(pos1+1:pos2),'("[",i6.6,"]")') i
     pos1=pos2

     pos2=pos1+11
     n=react_type(i)%obj1
     write(str(pos1+1:pos2),'(1x,a10)') obj_type(n)%name
     pos1=pos2

     pos2=pos1+3
     write(str(pos1+1:pos2),'(1x,"+",1x)')
     pos1=pos2

     pos2=pos1+11
     n=react_type(i)%obj2
     write(str(pos1+1:pos2),'(1x,a10)') obj_type(n)%name
     pos1=pos2

     pos2=pos1+5
     write(str(pos1+1:pos2),'(1x,"(",i1,")",1x)') &
          react_type(i)%n_data
     pos1=pos2

     pos2=pos1+4
     write(str(pos1+1:pos2),'(1x,"->",1x)')
     pos1=pos2

     do j=1,react_type(i)%n_new(1)
        pos2=pos1+11
        n=react_type(i)%new(1)%prod_type(j)
        write(str(pos1+1:pos2),'(1x,a10)') &
             obj_type(n)%name
        pos1=pos2
     end do

     pos2=pos1+16
     write(str(pos1+1:pos2),'(1x,"k=",1pe13.5)') &
          react_type(i)%react_const_rate(1)
     pos1=pos2

     call log_msg1_indent(cunit,in2,str(1:pos2))

     do j=2,react_type(i)%n_data
        pos1=0

        do k=1,react_type(i)%n_new(j)
           pos2=pos1+11
           n=react_type(i)%new(j)%prod_type(k)
           write(str(pos1+1:pos2),'(1x,a10)') &
                obj_type(n)%name
           pos1=pos2
        end do

        pos2=pos1+14
        write(str(pos1+1:pos2),'(1x,"k=",1pe13.5)') &
             react_type(i)%react_const_rate(j)
        pos1=pos2

        call log_msg1_indent(cunit,30,str(1:pos2))
     end do
  end do

  ! Source of geometric objects
  call log_msg1(cunit,"")
  call log_msg1_indent(cunit,in1,"> &
       Dissociation of geometric objects")
  do i=1,n_geom_obj
     pos1=0

     pos2=pos1+4
     write(str(pos1+1:pos2),'("[",i2.2,"]")') i
     pos1=pos2

     if (geom_obj(i)%does_diss) then
        pos2=pos1+4
        write(str(pos1+1:pos2),'(1x,"(",i1,")")') &
             geom_obj(i)%diss_type
        pos1=pos2

        pos2=pos1+14
        write(str(pos1+1:pos2),'(1x,1pe13.5)') &
             geom_obj(i)%diss_const_rate(1)
        pos1=pos2

        call log_msg1_indent(cunit,in2,str(1:pos2))

        do j=2,geom_obj(i)%diss_type
           pos1=0
           
           pos2=pos1+14
           write(str(pos1+1:pos2),'(1x,1pe13.5)') &
                geom_obj(i)%diss_const_rate(j)
           pos1=pos2

           call log_msg1_indent(cunit,13,str(1:pos2))
        end do

     else
        pos2=pos1+12
        write(str(pos1+1:pos2),'(1x,"indivisible")')
        pos1=pos2

        call log_msg1_indent(cunit,in2,str(1:pos2))
     end if

  end do

  ! Sink reactions
  call log_msg1(cunit,"")
  call log_msg1_indent(cunit,in1,"> &
       Transition rate for sinks")
  do i=1,n_sink_type
     pos1=0

     pos2=pos1+8
     write(str(pos1+1:pos2),'("[",i6.6,"]")') i
     pos1=pos2

     pos2=pos1+8
     write(str(pos1+1:pos2),'(1x,"gobj=",i2)') &
          sink_type(i)%gid
     pos1=pos2

     pos2=pos1+3
     write(str(pos1+1:pos2),'(1x,"+",1x)')
     pos1=pos2

     pos2=pos1+11
     n=sink_type(i)%lid
     write(str(pos1+1:pos2),'(1x,a10)') &
          obj_type(n)%name
     pos1=pos2

     pos2=pos1+5
     write(str(pos1+1:pos2),'(1x,"(",i1,")",1x)') &
          sink_type(i)%n_data
     pos1=pos2

     pos2=pos1+4
     write(str(pos1+1:pos2),'(1x,"->",1x)')
     pos1=pos2

     do j=1,sink_type(i)%n_new(1)
        pos2=pos1+11
        n=sink_type(i)%new(1)%prod_type(j)
        write(str(pos1+1:pos2),'(1x,a10)') &
             obj_type(n)%name
        pos1=pos2
     end do

     pos2=pos1+16
     write(str(pos1+1:pos2),'(1x,"k=",1pe13.5)') &
          sink_type(i)%react_const_rate(1)
     pos1=pos2

     call log_msg1_indent(cunit,in2,str(1:pos2))

     do j=2,sink_type(i)%n_data
        pos1=0
        
        do k=1,sink_type(i)%n_new(j)
           pos2=pos1+11
           n=sink_type(i)%new(j)%prod_type(k)
           write(str(pos1+1:pos2),'(1x,a10)') &
                obj_type(n)%name
           pos1=pos2
        end do
        
        pos2=pos1+14
        write(str(pos1+1:pos2),'(1x,"k=",1pe13.5)') &
             sink_type(i)%react_const_rate(j)
        pos1=pos2

        call log_msg1_indent(cunit,30,str(1:pos2))
     end do
  end do

  return

end subroutine check_transition_rate
